﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sy5_5
{
    public partial class Form1 : Form
    {
        Bitmap pic; // 原图
        int f = 4; // 缩小倍数（1:4）
        int w, h; // 原图的宽、高
        int r; // 右侧裁剪区域的半径（pictureBox2宽度的1/2）
        int p2Width, p2Height; // pictureBox2的宽、高
        Graphics g; // pictureBox2的画布

        // 定义图片的绝对路径（核心修改：指定Debug文件夹路径）
        string imgPath = @"C:\Users\42457\Desktop\作业\sy5-5\bin\Debug\random.jpg";

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (pic == null) return;

            // 1. 计算鼠标位置在原图中的坐标（放大f倍）
            int x = f * e.X;
            int y = f * e.Y;

            // 2. 边界修正：避免裁剪区域超出原图范围
            x = (x < r) ? r : (x > w - r) ? w - r : x;
            y = (y < r) ? r : (y > h - r) ? h - r : y;

            // 3. 定义原图中要裁剪的区域（以(x,y)为中心，r为半径的矩形）
            Rectangle sRect = new Rectangle(x - r, y - r, 2 * r, 2 * r);
            // 定义右侧pictureBox2的显示区域
            Rectangle dRect = new Rectangle(0, 0, p2Width, p2Height);

            // 4. 清空pictureBox2之前的绘制
            g.Clear(pictureBox2.BackColor);

            // 5. 在pictureBox2中绘制裁剪后的原图区域
            g.DrawImage(pic, dRect, sRect, GraphicsUnit.Pixel);

            // 6. 绘制辅助线（十字线，与实验界面一致）
            Pen p = new Pen(Color.Red);
            // 横线
            g.DrawLine(p, 0, p2Height / 2, p2Width, p2Height / 2);
            // 竖线
            g.DrawLine(p, p2Width / 2, 0, p2Width / 2, p2Height);

            // 释放画笔资源
            p.Dispose();
        }

        public Form1()
        {
            InitializeComponent();
            this.Text = "图像查看器";

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                // 核心修改：从指定路径加载图片（替代Properties.Resources）
                pic = new Bitmap(imgPath);
                w = pic.Width;
                h = pic.Height;

                // 更新标签显示的原图尺寸（自动读取图片实际尺寸，更灵活）
                label1.Text = $"原始大小：{w} * {h}";

                // 左侧pictureBox1显示缩小4倍的图
                pictureBox1.Image = pic;
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; // 按比例缩小显示

                // 初始化右侧pictureBox2的参数
                p2Width = pictureBox2.ClientSize.Width;
                p2Height = pictureBox2.ClientSize.Height;
                r = p2Width / 2; // 裁剪区域半径（pictureBox2宽度的1/2）

                // 获取pictureBox2的画布
                g = pictureBox2.CreateGraphics();
            }
            catch (System.IO.FileNotFoundException)
            {
                // 捕获图片不存在的异常
                MessageBox.Show($"未找到图片文件！请检查路径：\n{imgPath}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                // 捕获其他异常（如图片损坏）
                MessageBox.Show($"加载图片失败：{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
